/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package be.cultuurschuur.services;

import be.cultuurschuur.Controllers.*;
import be.cultuurschuur.entity.*;
import be.cultuurschuur.interfaces.*;
import java.io.*;
import java.util.*;
import java.util.logging.*;
import javax.faces.context.*;
import javax.persistence.*;


/**
 *
 * @author Jolien
 */
public class BLBoeking implements BoekingInterface
{
    EntityManagerFactory emf = Persistence.createEntityManagerFactory("cultuurschuurPU");
    EntityManager em = emf.createEntityManager();
    EntityTransaction tx = em.getTransaction();
    
    private Klant klant;
    private Reis reis;
    private int betaalwijze;
    private int totaalprijs;
    private int aantalDeelnemers;

    public Klant getKlant() {
        return klant;
    }

    public void setKlant(int klantId)
    {
        BLKlant bLKlant = new BLKlant();
        this.klant = bLKlant.getKlantById(klantId);
    }

    public Reis getReis() {
        return reis;
    }

    public void setReis(int reisId)
    {
        BLReis bLReis = new BLReis();
        this.reis = bLReis.getReisById(reisId);
    }

    public int getBetaalwijze() {
        return betaalwijze;
    }

    public void setBetaalwijze(int betaalwijze)
    {
        this.betaalwijze = betaalwijze;
    }

    public int getTotaalprijs() {
        return totaalprijs;
    }

    public void setTotaalprijs(int totaalprijs) {
        this.totaalprijs = totaalprijs;
    }

    public int getAantalDeelnemers() {
        return aantalDeelnemers;
    }

    public void setAantalDeelnemers(int aantalDeelnemers) {
        this.aantalDeelnemers = aantalDeelnemers;
    }

    @Override
    public Boeking insertBoeking()
    {
        BLBetaalwijze bLBetaalwijze = new BLBetaalwijze();
        
        tx.begin();
        Boeking boeking = new Boeking();
        boeking.setAantalDeelnemers(aantalDeelnemers);
        boeking.setBetaalwijze(bLBetaalwijze.getBetaalwijzeById(betaalwijze));
        boeking.setKlant(klant);
        boeking.setReis(reis);
        boeking.setTotaalprijs(totaalprijs);
        
        em.persist(boeking);
        tx.commit();
        
//        try
//        {
//            FacesContext.getCurrentInstance().getExternalContext().redirect("overzicht.xhtml");
//        }
//        catch (IOException ex)
//        {
//            Logger.getLogger(VervoerController.class.getName()).log(Level.SEVERE, null, ex);
//        }
        
        return boeking;
    }
    
    @Override
    public List<Boeking> getBoekingen()
    {
        return em.createNamedQuery("Boeking.getAll").getResultList();
    }
    @Override
    public Boeking getBoekingById(int id)
    {
        Query q = em.createNamedQuery("Boeking.getById");
        q.setParameter(1, id);
        Boeking boeking = (Boeking)q.getSingleResult();
        return boeking;
    }
    public List<Boeking> getBoekingByKlant(int klantId)
    {
        Query q = em.createNamedQuery("Boeking.getByKlant");
        q.setParameter(1, klantId);
        return (List<Boeking>) q.getResultList();
    }
    @Override
    public Boeking updateBoeking(Boeking boeking)
    {
        tx.begin();

        Boeking b = em.find(Boeking.class, boeking.getId());
        b.setAantalDeelnemers(boeking.getAantalDeelnemers());
        b.setBetaalwijze(boeking.getBetaalwijze());
        b.setKlant(boeking.getKlant());
        b.setReis(boeking.getReis());
        b.setTotaalprijs(boeking.getTotaalprijs());
        em.persist(b);

        tx.commit();
        return b;
    }
    @Override
    public boolean deleteBoeking(int id)
    {
        try {
            tx.begin();

            Boeking b = em.find(Boeking.class, id);
            em.remove(b);
            tx.commit();
            return true;
        } catch (Exception exc) {
            return false;
        }
    }
}
